<?php

/**
 *
 * @author "Rodrigo Rutkoski Rodrigues, <rutkoski@gmail.com>"
 *
 * TODO: emulate onDelete and onUpdate options CASCADE and SET NULL
 * TODO: add isExclusive and isUnique parameters to HABTM associations
 * TODO: add source and target multiplicity parameters to HABTM associations
 *
 */
interface IAssociationDefinition
{

  /**
   *
   * @return string
   */
  public function getName();

  /**
   *
   * @return string
   */
  public function getAssociationPrimaryKey();

  /**
   *
   * @return string
   */
  public function getAssociationForeignKey();

  /**
   *
   * @return string
   */
  public function getAssociationTable();

  /**
   *
   * @return boolean
   */
  public function isRequired();

  /**
   *
   * @return boolean
   */
  public function isSingle();

  /**
   *
   * @return IEntityDefinition
   */
  public function getTarget();

  /**
   *
   * @return IEntityDefinition
   */
  public function getSource();

  /**
   *
   * @return string
   */
  public function getPrimaryKey();

  /**
   *
   * @return IFieldDefinition
   */
  public function getPrimaryKeyField();

  /**
   *
   * @return string
   */
  public function getForeignKey();

  /**
   *
   * @return IFieldDefinition
   */
  public function getForeignKeyField();

  /**
   *
   * @return IAssociation
   */
  public function getProxy();

  /**
   *
   * @return IAssociationDAO
   */
  public function getDAO();

}

?>